package com.zxy.zxyrpc.registry;

import com.zxy.zxyrpc.config.RegistryConfig;
import com.zxy.zxyrpc.model.ServiceMetaInfo;

import java.util.List;

/**
 * 注册中心 SPI 接口
 * todo 等待扩展
 *
 * @author zxy
 * @since 2025/5/18
 **/
public interface Registry {
    /**
     * 初始化
     *
     * @param registryConfig 注册中心配置
     */
    void init(RegistryConfig registryConfig);

    /**
     * 服务注册
     *
     * @param serviceMetaInfo 服务元信息
     */
    void registry(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 服务注销
     *
     * @param serviceMetaInfo 服务元信息
     */
    void unRegistry(ServiceMetaInfo serviceMetaInfo);

    /**
     * 服务发现
     *
     * @param serviceKey 服务键名
     * @return 服务列表
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 服务销毁
     */
    void destroy();

    /**
     * 心跳检查（服务端）
     */
    void heartBeat();

    /**
     * 监听（消费端）
     *
     * @param serviceNodeKey 被监听的从节点 key
     */
    void watch(String serviceKey, String serviceNodeKey);
}
